package com.zjw.demo.vertx.starter.annotation.core;


import java.lang.annotation.*;

/**
 * @see Bean
 * 此字段可以注解在参数，或者公开成员中，
 * @see #query() 表示容器中指定key的实例。
 * 若不存在，则会尝试去注册改类，
 * 若注册失败，会抛出异常。
 * <p>
 * 参考如下
 * <code>
 * *   @Bean
 * * public class Bean1 {
 * *
 * *   @Inject
 * *   public Bean2 bean2;
 * *
 * * }
 * </code>
 * <p>
 * 注意：若出现类似以下循环注入的情况,将抛出异常。
 * <code>
 * <p>
 * * @Bean
 * * public class Bean1 {
 * *
 * *   public Bean2 bean2;
 * *
 * *    public Bean1(@Inject Bean2 bean2){
 * *    this.bean2 = bean2;
 * *  }
 * *
 * * }
 * *
 * *
 * *@Bean
 * * public class Bean2 {
 * *
 * *   public Bean1 bean1;
 * *   public Bean1(@Inject Bean1 bean1){
 * *       this.bean1 = bean1;
 * *     }
 * * }
 * </code>
 */
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Inject {
  String query() default "";
}
